嵌入式研究视角之编译视角: 首

📖 精选 ✍️ 🌶 | 📅 2026-01-09 | 👍 0 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/编译 #技术/Linux调试 #质量/普通

原帖 | 🌶 | 2026-01-09 18:58 | 👍0 | 阅读约1

嵌入式研究视角之编译视角:
首先,我们需要明确一个事情,Linux大部分由C语言构成,那么要研究Linux,C语言的重要性不言而喻。那么平时我们喜欢看些书籍补足理论,比如《》,这本书有提到嵌入式研究的角度,内存视角,编译器视角,架构视角,这里我们主要提到的是编译器视角。
翻翻书可以看到C语言编译的基本过程是:.c (源文件) 经预处理生成 .i (预处理文件),再经编译生成 .s (汇编文件),随后经汇编生成 .o (目标文件),最后经链接整合库文件生成 可执行程序 (无后缀或 .exe)
我们调试过程中常用的一个思路就是假说演绎法,这个方法的意思就是修改特定逻辑,然后烧录测试查看效果是否符合预期来验证思路,但是因为我们实际项目中往往版本源码比如说Andrio6为了方便是兼容多个机型的,当我们运行编译脚本build.sh,脚本逻辑才会根据传入机型参数进行对应设备树和内核配置的选择,那么我们来梳理这个逻辑,我们要验证逻辑实现是否正确,首先要排除一个问题就是我们的代码确实被编译进了内核,对于这个庞大的源码,查看Makefile进行定位显然相当麻烦,因为SDK父文件夹往往只是调用各个子文件夹下的Makefile,我们要找到这个调用逻辑还需要对应机型参数去查看子文件夹Makefile,那么有简单的思路吗?当然有的,要是我们对C语言的编译流程比较熟悉,我们其实就可以通过一个简单的编译现象来进行这个问题的排查,.c->.o这个是编译进内核的必经之路,那么我们自然的想到通过.o文件的时间戳来查看是否是最近生成,因为.c生成的.o往往是同名,并且时间戳是绝对的,这两个利好就会让我们的排查非常方便,当我们执行编译指令,只需要使用ls -l指令查看.c同名.o文件是否生成,生成时间戳就可以判断Makefile是否执行编译,内核中是否包含我们修改的编译逻辑,从而再继续验证我们的代码逻辑是否正确,反过来也可以通过这个.o文件来定位我们具体的Makefile,打通整个编译链路,掌握编译视角,让我们对linux这个庞大的C语言集合有一个比较明晰的认知,使得我们可以针对性的需要改动哪个文件就可以验证哪个链路,避免浪费时间。


相关笔记